<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>

    //  for (var i in list) { // 遍历数组
    //     console.log(i, list[i]); // 每次循环时执行的代码(循环下标,循环的当前元素)
    // }


    // 数组的遍历方法 => 数组的拓展方法(官方封装的专门供数组使用的方法)
    // 语法: 数组.方法名()

    // forEach map  filter some every find findIndex reduce reduceRight 



    // forEach()  数组遍历
    // 作用: 遍历数组,每次循环时执行传入的函数(回调函数),
    // 回调函数 => 有三个形式参数(参数可以自己改),  item:循环当前元素, index:循环的当前下标, array: 原数组(被遍历的数组 -> 很少用
    // 返回值: undefined  (forEach内部没有设置返回值 => 默认返回undefind)


    // var list = [1, 4, 7, 8, 5, 2, 3, 6, 9];
    // // 遍历数组
    // list.forEach(function(item,index,array){ // 形参(item:循环当前元素, index:循环的当前下标, array: 原数组(被遍历的数组 -> 很少用))
    //     console.log(item,index,array); //  每次循环时执行的代码
    // });

    // var list = [1, 4, 7, 8, 5, 2, 3, 6, 9];
    // var sum = 0;
    // // 遍历数组
    // list.forEach(function(item,index,array){ // 形参(item:循环当前元素, index:循环的当前下标, array: 原数组(被遍历的数组 -> 很少用))
    //     console.log(item,index,array); //  每次循环时执行的代码
    //     sum += item;
    // });
    // console.log(sum);

    // reduce(fn,initValue)  数组归并(额外提供了一个贯穿循环的变量)
    // 作用: 遍历数组,每次循环时执行传入的函数(回调函数),

    // reduce的第一参数是一个函数 => 传入到reduce中(实际参数)
    // 回调函数有四个参数 prev item index array 
    //    prev (1) 默认接收reduce方法的第二参数作为初始值,如果不设置第二参数作为初始值,默认将数组的第一个元素作为初始值,并从数组的第二个元素开始变量
    //         (2) 接收上一次函数执行的结果 作为prev的初始值
    //    item 循环的当前元素    
    //    index 循环的当前下标
    //    array 原数组

    // reduce的第一参数是一个函数 
    // initValue 设置prev的初始值

    // 返回值: 最后一个函数执行后返回的结果

    /* var list = [1, 4, 7, 8, 5, 2, 3, 6, 9];
    // 遍历数组
    var result = list.reduce(function(prev,item,index,array){ // 形参(item:循环当前元素, index:循环的当前下标, array: 原数组(被遍历的数组 -> 很少用))
        console.log(prev,item,index,array); //  每次循环时执行的代码
        return prev + item; // 1 5 12
    },0);
    console.log(result); */

    // var list = [1, 4, 7, 8, 5, 2, 3, 6, 9];
    // // 遍历数组
    // var result = list.reduce(function(sum,item,index,array){ // 形参(item:循环当前元素, index:循环的当前下标, array: 原数组(被遍历的数组 -> 很少用))
    //     console.log(sum,item,index,array); //  每次循环时执行的代码
    //     return sum + item; // 1 5 12
    // },0);
    // console.log(result);


    // 如果不设置initValue(prev的初始值)
    // var list = [1, 4, 7, 8, 5, 2, 3, 6, 9];
    // // 遍历数组
    // var result = list.reduce(function(prev,item,index,array){ // 形参(item:循环当前元素, index:循环的当前下标, array: 原数组(被遍历的数组 -> 很少用))
    //     console.log(prev,item,index,array); //  每次循环时执行的代码
    //     return prev + item; // 1 5 12
    // });
    // console.log(result);







    


</script>

</html>